import axios from 'axios'
import router from '@/router'
import { useLoginEmpStore } from '@/stores/loginEmp'
import { ElMessage } from 'element-plus'

//创建axios实例对象
const request = axios.create({
  baseURL: import.meta.env.VITE_USE_MOCK === 'true' ? '/api' : import.meta.env.VITE_API_BASE_URL,
  timeout: 600000
})

// axios请求拦截器
request.interceptors.request.use(
  config => {
    const loginStore = useLoginEmpStore();
    const loginInfo = loginStore.getLoginEmp();
    if(loginInfo && loginInfo.token){
      config.headers['token'] = loginInfo.token;
    }
    // 打印每次请求的url和token
    console.log('请求url:', config.url, 'token:', config.headers['token']);
    return config;
  },
  error => {
    console.error('请求错误:', error);
    return Promise.reject(error);
  }
)

//axios的响应 response 拦截器
request.interceptors.response.use(
  (response) => {
    const res = response.data;
    // 对于登录相关的接口和上传接口，让业务代码自己处理状态码
    const isLoginRelated = response.config.url?.includes('/login') ||
                          response.config.url?.includes('/sms/');
    const isUploadRelated = response.config.url?.includes('/upload') ||
                           response.config.url?.includes('/kf/upload');

    if (isLoginRelated || isUploadRelated) {
      return response;
    }

    // 这里可以根据业务状态码做统一处理
    if (res.code === '100') {
      return response;
    }
    // 处理其他业务状态码
    ElMessage.warning(res.message || '操作失败');
    return Promise.reject(new Error(res.message || '操作失败'));
  },
  (error) => {
    console.error('响应错误:', error);

    // 检查是否是取消的请求
    if (axios.isCancel(error)) {
      console.log('请求被取消:', error.message);
      return Promise.reject(error);
    }

    // 检查是否是超时错误
    if (error.code === 'ECONNABORTED' || error.message.includes('timeout')) {
      console.error('请求超时:', error);
      ElMessage.error('请求超时，请检查网络连接');
      return Promise.reject(error);
    }

    if (error.response) {
      switch (error.response.status) {
        case 401:
          ElMessage.error('会话超时，请重新登录');
          router.push('/login');
          break;
        case 403:
          ElMessage.error('没有权限访问');
          break;
        case 404:
          ElMessage.error('请求的资源不存在');
          break;
        case 500:
          ElMessage.error('服务器内部错误');
          break;
        default:
          ElMessage.error('系统接口访问异常');
      }
    } else if (error.request) {
      ElMessage.error('网络连接失败，请检查网络');
    } else {
      ElMessage.error(error.message || '系统接口访问异常');
    }
    return Promise.reject(error);
  }
)

export default request
